<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta content="yes" name="apple-mobile-web-app-capable"/>
    <meta content="black" name="apple-mobile-web-app-status-bar-style"/>
    <meta content="telephone=no" name="format-detection"/>
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>echarts地图</title>
    <script src="../js/data.js"></script>
    <script src="../js/vue2.js"></script>
    <script src="../js/echarts.min.js"></script>
    <script src="../js/jquery.min.js"></script>
</head>

<body>
<div class="viewport" id="home">
    <div class="echarts" id="echarts"></div>
</div>
</body>
<script>
    var geoCoordMap = {}
    var customerBatteryCityData = []

    function GetRandomNum(Min, Max) {
        var Range = Max - Min;
        var Rand = Math.random();
        return (Min + Math.round(Rand * Range));
    }

    // 获取数据
    function getData() {
        $.get('../js/data.json', function (data) {
            getEcharts(data)
        });
    }

    // 渲染echarts
    function getEcharts(data) {
        var name = ''
        var chartDom = document.getElementById('echarts');
        var myChart = echarts.init(chartDom);
        var nameMap = '地图数据';
        echarts.registerMap(nameMap, data);
        var mapFeatures = echarts.getMap(nameMap).geoJson.features;
        mapFeatures.forEach(function (v, index) {
            customerBatteryCityData.push({
                name: v.properties.name,
                value: GetRandomNum(20,100)
            });
            geoCoordMap[v.properties.name] = v.properties.center;
        });
        option = {
            backgroundColor: '#131C38',
            tooltip: {
                trigger: 'item',
                show: true,
                enterable: true,
                textStyle: {
                    fontSize: 20,
                    color: '#fff'
                },
                backgroundColor: 'rgba(0,2,89,0.8)',
                formatter: '{b}<br />{c}'
            },
            geo: [
                {
                    map: nameMap,
                    aspectScale: 0.9,
                    roam: false, // 是否允许缩放
                    zoom: 1, // 默认显示级别
                    layoutSize: '95%',
                    layoutCenter: ['50%', '50%'],
                    itemStyle: {
                        normal: {
                            areaColor: {
                                type: 'linear-gradient',
                                x: 0,
                                y: 400,
                                x2: 0,
                                y2: 0,
                                colorStops: [{
                                    offset: 0,
                                    color: 'rgba(37,108,190,0.3)' // 0% 处的颜色
                                }, {
                                    offset: 1,
                                    color: 'rgba(15,169,195,0.3)' // 50% 处的颜色
                                }],
                                global: true // 缺省为 false
                            },
                            borderColor: '#4ecee6',
                            borderWidth: 1
                        },
                        emphasis: {
                            areaColor: {
                                type: 'linear-gradient',
                                x: 0,
                                y: 300,
                                x2: 0,
                                y2: 0,
                                colorStops: [{
                                    offset: 0,
                                    color: 'rgba(37,108,190,1)' // 0% 处的颜色
                                }, {
                                    offset: 1,
                                    color: 'rgba(15,169,195,1)' // 50% 处的颜色
                                }],
                                global: true // 缺省为 false
                            }
                        }
                    },
                    emphasis: {
                        itemStyle: {
                            areaColor: '#0160AD'
                        },
                        label: {
                            show: 0,
                            color: '#fff'
                        }
                    },
                    zlevel: 3
                },
                {
                    map: nameMap,
                    aspectScale: 0.9,
                    roam: false, // 是否允许缩放
                    zoom: 1, // 默认显示级别
                    layoutSize: '95%',
                    layoutCenter: ['50%', '50%'],
                    itemStyle: {
                        normal: {
                            borderColor: 'rgba(192,245,249,.6)',
                            borderWidth: 2,
                            shadowColor: '#2C99F6',
                            shadowOffsetY: 0,
                            shadowBlur: 120,
                            areaColor: 'rgba(29,85,139,.2)'
                        }
                    },
                    zlevel: 2,
                    silent: true
                },
                {
                    map: nameMap,
                    aspectScale: 0.9,
                    roam: false, // 是否允许缩放
                    zoom: 1, // 默认显示级别
                    layoutSize: '95%',
                    layoutCenter: ['50%', '50%'],
                    itemStyle: {
                        // areaColor: '#005DDC',
                        areaColor: 'rgba(0,27,95,0.4)',
                        borderColor: '#004db5',
                        borderWidth: 1
                    },
                    zlevel: 1,
                    silent: true
                }
            ],
            series: [
                // map
                {
                    geoIndex: 0,
                    // coordinateSystem: 'geo',
                    showLegendSymbol: true,
                    type: 'map',
                    roam: true,
                    label: {
                        normal: {
                            show: false,
                            textStyle: {
                                color: '#fff'
                            }
                        },
                        emphasis: {
                            show: false,
                            textStyle: {
                                color: '#fff'
                            }
                        }
                    },

                    itemStyle: {
                        normal: {
                            borderColor: '#2ab8ff',
                            borderWidth: 1.5,
                            areaColor: '#12235c'
                        },
                        emphasis: {
                            areaColor: '#2AB8FF',
                            borderWidth: 0,
                            color: 'red'
                        }
                    },
                    map: nameMap, // 使用
                    data: customerBatteryCityData
                    // data: this.difficultData //热力图数据   不同区域 不同的底色
                },
                // 柱状体的主干
                {
                    type: 'lines',
                    zlevel: 5,
                    effect: {
                        show: false,
                        // period: 4, //箭头指向速度，值越小速度越快
                        // trailLength: 0.02, //特效尾迹长度[0,1]值越大，尾迹越长重
                        // symbol: 'arrow', //箭头图标
                        // symbol: imgDatUrl,
                        symbolSize: 5 // 图标大小
                    },
                    lineStyle: {
                        width: 20, // 尾迹线条宽度
                        color: 'rgb(22,255,255, .6)',
                        opacity: 1, // 尾迹线条透明度
                        curveness: 0 // 尾迹线条曲直度
                    },
                    label: {
                        show: 0,
                        position: 'end',
                        formatter: '245'
                    },
                    silent: true,
                    data: lineData()
                },
                // 柱状体的顶部
                {
                    type: 'scatter',
                    coordinateSystem: 'geo',
                    geoIndex: 0,
                    zlevel: 5,
                    label: {
                        show: true,
                        formatter: function () {
                            return `顶部label`
                        },
                        position: "top"
                    },
                    symbol: 'circle',
                    symbolSize: [20, 10],
                    itemStyle: {
                        color: 'rgb(22,255,255, 1)',
                        opacity: 1
                    },
                    silent: true,
                    data: scatterData()
                },
                // 柱状体的底部
                {
                    type: 'scatter',
                    coordinateSystem: 'geo',
                    geoIndex: 0,
                    zlevel: 4,
                    label: {
                        // 这儿是处理的
                        formatter: '{b}',
                        position: 'bottom',
                        color: '#fff',
                        fontSize: 12,
                        distance: 10,
                        show: true
                    },
                    symbol: 'circle',
                    symbolSize: [20, 10],
                    itemStyle: {
                        // color: '#F7AF21',
                        color: 'rgb(22,255,255, 1)',
                        opacity: 1
                    },
                    silent: true,
                    data: scatterData2()
                },
                // 底部外框
                {
                    type: 'scatter',
                    coordinateSystem: 'geo',
                    geoIndex: 0,
                    zlevel: 4,
                    label: {
                        show: false
                    },
                    symbol: 'circle',
                    symbolSize: [40, 20],
                    itemStyle: {
                        color: {
                            type: 'radial',
                            x: 0.5,
                            y: 0.5,
                            r: 0.5,
                            colorStops: [
                                {
                                    offset: 0, color: 'rgb(22,255,255, 0)' // 0% 处的颜色
                                },
                                {
                                    offset: .75, color: 'rgb(22,255,255, 0)' // 100% 处的颜色
                                },
                                {
                                    offset: .751, color: 'rgb(22,255,255, 1)' // 100% 处的颜色
                                },
                                {
                                    offset: 1, color: 'rgb(22,255,255, 1)' // 100% 处的颜色
                                }
                            ],
                            global: false // 缺省为 false
                        },

                        opacity: 1
                    },
                    silent: true,
                    data: scatterData2()
                }
            ]
        }
        myChart.resize()
        myChart.setOption(option)
    }

    // 动态计算柱形图的高度（定一个max）
    function lineMaxHeight() {
        const maxValue = Math.max(...customerBatteryCityData.map(item => item.value))
        return 0.9 / maxValue
    }

    // 柱状体的主干
    function lineData() {
        return customerBatteryCityData.map((item) => {
            return {
                coords: [geoCoordMap[item.name], [geoCoordMap[item.name][0], geoCoordMap[item.name][1] + item.value * lineMaxHeight()]]
            }
        })
    }

    // 柱状体的顶部
    function scatterData() {
        return customerBatteryCityData.map((item) => {
            return [geoCoordMap[item.name][0], geoCoordMap[item.name][1] + item.value * lineMaxHeight()]
        })
    }

    // 柱状体的底部
    function scatterData2() {
        return customerBatteryCityData.map((item) => {
            return {
                name: item.name,
                value: geoCoordMap[item.name]
            }
        })
    }

    if (window.location.origin == 'file://') {
        setTimeout(() => {
            getEcharts(gdMap)
        }, 100)
    } else {
        getData()
    }
</script>
</html>
<style>
    html, body {
        padding: 0;
        margin: 0;
    }

    #home {
        width: 100%;
        height: 100%;
        background: #0d1551;
        position: fixed;
    }

    .echarts {
        width: 100%;
        height: 100%;
        background: #0d1551;
        position: fixed;
    }

    .info {
        position: fixed;
        top: 10px;
        left: 10px;
        z-index: 10;
        color: red;
    }

    .links {
        position: fixed;
        top: 10px;
        left: 10px;
        z-index: 10;

    }

    .links a {
        text-decoration: none;
        color: #fff;
    }
</style>
